var arr = [1,2,3,4,5,6,7,8];

function bianArr(arr, i) {
    if (arr == null || arr.length <= i) return;
    console.log(arr[i]);
    bianArr(arr, i + 1);
}
// bianArr(arr, 0);


function Node (value) {
    this.value = value;
    this.next = null;
}

var node1 = new Node(1);
var node2 = new Node(2);
var node3 = new Node(3);
var node4 = new Node(4);
var node5 = new Node(5); 

node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;

//递归遍历，必须有出口
function bianLink(root) {
    if (root == null ) return;
    console.log('root',root.value);
    bianLink(root.next);
}
// bianLink(node1)

function nizhi(root){
    if(root.next.next == null){ //倒数第二个
      root.next.next = root // 倒数第一个指向 倒数第二个 返回倒数第二个
      console.log(root.next)
      return root.next
    }else{
      const result = nizhi(root.next) // 
      debugger
      root.next.next = root
      debugger
      root.next = null
      console.log(result)
      debugger
      return result
    }
    // return root
}
// console.log(node1)
// console.log(nizhi(node1))
// debugger
// bianLink(node1);

function nizhiTest(root){ // node1
   if(root.next.next == null){
      root.next.next = root
      return root.next // node 3
   }else{
     const res = nizhiTest(root.next) // node 1 => node 2
     // node 1的next node 2 的 next改变 指向 node 1
     // 在改变志向之前 先执行函数 返回 node 2 的next node 3 // 递推的原理
     root.next.next = root
     root.next = null // node 1的next 改成 null
     return res
     
   }

}

function nizhiLixi(root) {
  console.log(root)
  debugger
    if(root.next.next == null){
      root.next.next = root
      return root.next // node 3
    }else{
      const res = nizhiLixi(root.next) // 
      console.log(res)
      res.next = res
      debugger
      return
  
      // console.log(res)
      // return res
    }
}
nizhiLixi(node1)